//
// Created by 32827 on 2023/11/16.
//

#ifndef YZFRAME_YZF_TIME_H
#define YZFRAME_YZF_TIME_H
#include "yzf.h"
/**
 * 只包括时钟相关计时器，不包含RCC外设时钟的开关
 * */
#ifdef __cplusplus
extern "C" {
#endif
    enum YZF_CLOCK{
        hse,
        hse_2,  ///PLL XT
        hsi,
        hsi_2,
        pll
    };
    typedef enum YZF_CLOCK YZF_CLOCK_SOURCE;
    /**
     * Phase-Locked Loop是否就绪
     * */
    YZF_RESULT yzf_clock_PLL_ready();
    /**
     * 高速外部时钟是否就绪
     * */
    YZF_RESULT yzf_clock_HSE_ready();
    /**
     * 高速内部时钟是否就绪
     * */
    YZF_RESULT yzf_clock_HSI_ready();

    YZF_RESULT yzf_clock_PLL_ON();
    YZF_RESULT yzf_clock_PLL_OFF();
    YZF_RESULT yzf_clock_HSE_ON();
    YZF_RESULT yzf_clock_HSE_OFF();
    YZF_RESULT yzf_clock_HSI_ON();
    YZF_RESULT yzf_clock_HSI_OFF();

    /**
     * PLL倍频系数 2-16 倍
     * */
    YZF_RESULT yzf_clock_PLL_MUL(uint8_t mul);
    /**
     * [SYSCLK]外设总线分频 可取1 2 4 8 16 32 64 128 256 512
     * */
    YZF_RESULT yzf_clock_AHB_DIV(uint16_t div);
    /**
     * [AHB]外设总线-分线1 可取1 2 4 8 16 最高可设置为36MHz
     * */
    YZF_RESULT yzf_clock_APB1_DIV(uint8_t div);
    /**
     * [AHB]外设总线-分线2 可取1 2 4 8 16 最高可设置为72MHz
     * */
    YZF_RESULT yzf_clock_APB2_DIV(uint8_t div);
    /**
     * 设置PLL时钟源 可选 HSI_2(HSI二分频) HSE HSE_2(HSE二分频)
     * */
    YZF_RESULT yzf_clock_PLL_set_source(YZF_CLOCK_SOURCE source);
    /**
     * 设置SYS时钟源 可选 HSI HSE PLL
     * */
    YZF_RESULT yzf_clock_SYS_set_source(YZF_CLOCK_SOURCE source);
#ifdef __cplusplus
}
#endif
#endif //YZFRAME_YZF_TIME_H
